package com.bit.cfdi.web.vm.wizard;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.zkoss.bind.BindUtils;
import org.zkoss.bind.annotation.BindingParam;
import org.zkoss.bind.annotation.Command;
import org.zkoss.bind.annotation.Init;
import org.zkoss.bind.annotation.NotifyChange;
import org.zkoss.zk.ui.select.annotation.VariableResolver;
import org.zkoss.zk.ui.select.annotation.WireVariable;

import com.bit.cfdi.web.domain.Telefono;
import com.bit.cfdi.web.domain.Usuario;
import com.bit.cfdi.web.session.SessionUtils;


@VariableResolver(org.zkoss.zkplus.spring.DelegatingVariableResolver.class)
public class Paso1ViewModel {
	
	private Logger log = LogManager.getLogger(this.getClass().getName());
	private String mailUser;
	private WizardViewParserPaso1 wizardViewParser; 
	@WireVariable	
	private SessionUtils sessionUtils;
	private Usuario usuario;	
		
	@Init
	public void init()
	{		
		wizardViewParser = new WizardViewParserPaso1();
		wizardViewParser.setTelefonos(new ArrayList<Telefono>());
		usuario = (Usuario)sessionUtils.getFromSession(SessionUtils.USUARIO);		
		mailUser = usuario.getEmail();
	}	
	
/**
*--- 	GETTERS AND SETTERS
*/	
	
	public WizardViewParserPaso1 getWizardViewParser() {
		return wizardViewParser;
	}

	public void setWizardViewParser(WizardViewParserPaso1 wizardViewParser) {
		this.wizardViewParser = wizardViewParser;
	}
	
	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public String getMailUser() {
		return mailUser;
	}

	public void setMailUser(String mailUser) {
		this.mailUser = mailUser;
	}
	
/**
 * --- METHODS
 */
	@Command
	@NotifyChange({"wizardViewParser"})	
	public void deletePhone(@BindingParam("index") Integer index)
	{
		if(wizardViewParser.getTelefonos().get(index) != null) {
			wizardViewParser.getTelefonos().remove(index.intValue());
		}
	}	
	
	@Command
	@NotifyChange({"wizardViewParser"})
	public void addPhone()
	{
		wizardViewParser.getTelefonos().add(new Telefono());		
	}
	
	@Command
	public void transformPhones() {
		/*usuario.getPersona().getContacto().getTelefonos().clear();
		for(Telefono currentTelefono : telefonos) {
			usuario.getPersona().getContacto().getTelefonos().add(
					currentTelefono);						
		}*/
	}
	
	@Command
	public void sendObjWizard()
	{
		Map <String, Object> objStep1 = new HashMap<String, Object>();
		objStep1.put("step1", wizardViewParser);
		BindUtils.postGlobalCommand(null, null, "assignObjStep1", objStep1);
	}		
}
